package fr.kptn.api.readability.structs.reader;

import java.util.Collection;
import java.util.Date;

import com.google.gson.annotations.SerializedName;

public class Bookmark {

	/**
	 * Identifier of the bookmark's user
	 */
	@SerializedName("user_id")
	private Long userId;
	
	/**
	 * Read percentage of the bookmark
	 */
	@SerializedName("read_percent")
	private Float readPercentage;
	
	/**
	 * Last date on which the bookmark has been updated
	 */
	@SerializedName("date_updated")
	private Date lastUpdatedDate;
	
	/**
	 * Whether this article is favorited or not
	 */
	private boolean favorite;
	
	/**
	 * Information on the bookmarked article
	 */
	private Article article;
	
	/**
	 * Identifier of the bookmark
	 */
	private Long id;
	
	/**
	 * Date on which this bookmark has been archived
	 */
	@SerializedName("date_archived")
	private Date archivedDate;
	
	/**
	 * Last date on which this bookmark has been opened
	 */
	@SerializedName("date_opened")
	@Deprecated
	private Date lastOpenedDate;
	
	/**
	 * Date on which this bookmark has been added
	 */
	@SerializedName("date_added")
	private Date addedDate;
	
	/**
	 * API Href of the bookmarked article
	 */
	@SerializedName("article_href")
	private String articheHref;
	
	/**
	 * Date on which this bookmark has been marked as favorited
	 */
	@SerializedName("date_favorited")
	private Date favoritedDate;
	
	/**
	 * Whether this article is archived or not
	 */
	private boolean archive;
	
	/**
	 * the bookmark's tag
	 */
	private Collection<Tag> tags;
	
	/**
	 * Default constructor
	 */
	public Bookmark() {
	}

	/******************** GETTERS AND SETTERS ********************/

	/**
	 * @return the userId
	 */
	public Long getUserId() {
		return userId;
	}

	/**
	 * @param userId the userId to set
	 */
	public void setUserId(Long userId) {
		this.userId = userId;
	}

	/**
	 * @return the readPercentage
	 */
	public Float getReadPercentage() {
		return readPercentage;
	}

	/**
	 * @param readPercentage the readPercentage to set
	 */
	public void setReadPercentage(Float readPercentage) {
		this.readPercentage = readPercentage;
	}

	/**
	 * @return the lastUpdatedDate
	 */
	public Date getLastUpdatedDate() {
		return lastUpdatedDate;
	}

	/**
	 * @param lastUpdatedDate the lastUpdatedDate to set
	 */
	public void setLastUpdatedDate(Date lastUpdatedDate) {
		this.lastUpdatedDate = lastUpdatedDate;
	}

	/**
	 * @return the favorite
	 */
	public boolean isFavorite() {
		return favorite;
	}

	/**
	 * @param favorite the favorite to set
	 */
	public void setFavorite(boolean favorite) {
		this.favorite = favorite;
	}

	/**
	 * @return the article
	 */
	public Article getArticle() {
		return article;
	}

	/**
	 * @param article the article to set
	 */
	public void setArticle(Article article) {
		this.article = article;
	}

	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * @return the archivedDate
	 */
	public Date getArchivedDate() {
		return archivedDate;
	}

	/**
	 * @param archivedDate the archivedDate to set
	 */
	public void setArchivedDate(Date archivedDate) {
		this.archivedDate = archivedDate;
	}

	/**
	 * @return the lastOpenedDate
	 */
	@Deprecated
	public Date getLastOpenedDate() {
		return lastOpenedDate;
	}

	/**
	 * @param lastOpenedDate the lastOpenedDate to set
	 */
	@Deprecated
	public void setLastOpenedDate(Date lastOpenedDate) {
		this.lastOpenedDate = lastOpenedDate;
	}

	/**
	 * @return the addedDate
	 */
	public Date getAddedDate() {
		return addedDate;
	}

	/**
	 * @param addedDate the addedDate to set
	 */
	public void setAddedDate(Date addedDate) {
		this.addedDate = addedDate;
	}

	/**
	 * @return the articheHref
	 */
	public String getArticheHref() {
		return articheHref;
	}

	/**
	 * @param articheHref the articheHref to set
	 */
	public void setArticheHref(String articheHref) {
		this.articheHref = articheHref;
	}

	/**
	 * @return the favoritedDate
	 */
	public Date getFavoritedDate() {
		return favoritedDate;
	}

	/**
	 * @param favoritedDate the favoritedDate to set
	 */
	public void setFavoritedDate(Date favoritedDate) {
		this.favoritedDate = favoritedDate;
	}

	/**
	 * @return the archive
	 */
	public boolean isArchive() {
		return archive;
	}

	/**
	 * @param archive the archive to set
	 */
	public void setArchive(boolean archive) {
		this.archive = archive;
	}

	/**
	 * @return the tags
	 */
	public Collection<Tag> getTags() {
		return tags;
	}

	/**
	 * @param tags the tags to set
	 */
	public void setTags(Collection<Tag> tags) {
		this.tags = tags;
	}

}
